package com.yupi.yupicturebackend.api.aliyunai.model;

import cn.hutool.core.annotation.Alias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class GetOutTextCreatePictureTaskResponse {

    /**
     * 请求唯一标识
     */
    @Alias("request_id")
    private String requestId;

    /**
     * 输出信息
     */
    private Output output;

    /**
     * 表示任务的输出信息
     */
    @Data
    public static class Output {

        /**
         * 任务 ID
         */
        @Alias("task_id")
        private String taskId;

        /**
         * 任务状态
         * <ul>
         *     <li>PENDING：排队中</li>
         *     <li>RUNNING：处理中</li>
         *     <li>SUSPENDED：挂起</li>
         *     <li>SUCCEEDED：执行成功</li>
         *     <li>FAILED：执行失败</li>
         *     <li>UNKNOWN：任务不存在或状态未知</li>
         * </ul>
         */
        @Alias("task_status")
        private String taskStatus;

        /**
         * 提交时间
         * 格式：YYYY-MM-DD HH:mm:ss.SSS
         */
        private String submitTime;

        /**
         * 调度时间
         * 格式：YYYY-MM-DD HH:mm:ss.SSS
         */
        private String scheduledTime;

        /**
         * 结束时间
         * 格式：YYYY-MM-DD HH:mm:ss.SSS
         */
        private String endTime;

        /**
         * 任务结果列表，包括图像URL、prompt、部分任务执行失败报错信息等
         */
        private List<Results> results;


        private String code;

        private String message;

        /**
         * 任务指标信息
         */
        private TaskMetrics taskMetrics;
    }

    /**
     * 表示任务的统计信息
     */
    @Data
    public static class TaskMetrics {

        /**
         * 总任务数
         */
        private Integer total;

        /**
         * 成功任务数
         */
        private Integer succeeded;

        /**
         * 失败任务数
         */
        private Integer failed;
    }

    @Data
    private static class Results {

        /**
         * 原始的输入prompt。
         */
        private String origPrompt;

        /**
         * 开启prompt智能改写后实际使用的prompt。
         * 当不开启prompt智能改写时，该字段不会返回。
         */
        private String actualPrompt;

        /**
         * 模型生成图片的URL地址。
         */
        private String url;

        /**
         * 图像错误码。部分任务执行失败时会返回该字段。
         */
        private String code;

        /**
         * 图像错误信息。部分任务执行失败时会返回该字段。
         */
        private String message;
    }


    private Usage usage;

    @Data
    private static class Usage {
        /**
         * 模型生成的图片的数量
         */
        private Integer imageCount;
    }
}
